package dao.impl;

import dao.MedicamentoDAO;
import excecao.ObjetoDuplicadoException;
import excecao.ObjetoNaoEncontradoException;
import java.util.ArrayList;
import java.util.List;
import modelo.Medicamento;

public class MemoryMedicamentoDAO implements MedicamentoDAO {

    // Banco
    private ArrayList<Medicamento> lista;
    private long seq;

    public MemoryMedicamentoDAO() {
        lista = new ArrayList<Medicamento>();
        seq = 0;
    }

    public void inclui(Medicamento umMedicamento) throws ObjetoDuplicadoException {

        for (Medicamento medicamento : lista) {
            if (medicamento.equals(umMedicamento)) {
                throw new ObjetoDuplicadoException();
            }
        }
        
        umMedicamento.setId(++seq);
        lista.add(umMedicamento);
    }

    public void altera(Medicamento umMedicamento) throws ObjetoNaoEncontradoException {
        boolean achou = false;

        for (Medicamento medicamento : lista) {
            if (medicamento.equals(umMedicamento)) {
                umMedicamento.setId(medicamento.getId());
                lista.remove(medicamento);
                lista.add(umMedicamento);
                achou = true;
                break;
            }
        }

        if (!achou) {
            throw new ObjetoNaoEncontradoException();
        }

    }

    public void exclui(Medicamento umMedicamento) throws ObjetoNaoEncontradoException {

        if (!lista.remove(umMedicamento)) {
            throw new ObjetoNaoEncontradoException();
        }

    }

    public Medicamento recuperaUmMedicamento(long idMedicamento) throws ObjetoNaoEncontradoException {
        Medicamento umMedicamento = new Medicamento();
        umMedicamento.setId(idMedicamento);
        for (Medicamento medicamento : lista) {
            if (medicamento.equals(umMedicamento)) {
                return medicamento;
            }
        }

        throw new ObjetoNaoEncontradoException();
    }

    public List<Medicamento> recuperaMedicamentos() {
        return lista;

    }
}
